package com.zhdl.modules.prefiresys.task;

import com.alibaba.fastjson2.JSON;
import com.zhdl.common.ytools.HttpClientUtil;
import com.zhdl.modules.prefiresys.entity.DefAreaHourRec;
import com.zhdl.modules.prefiresys.service.DefAreaHourRecService;
import com.zhdl.modules.prefiresys.service.dto.HourCriteria;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 定时上报防区小时浓度监测数据
 */
@Slf4j
@Component
public class ReportAreaHourRec {

    final DefAreaHourRecService areaHourRecService;

    /**
     * 任务间隔时间，单位毫秒
     */
    // final long interval = 1000 * 100;
    // final long interval = 1000 * 2;
    @Autowired
    public ReportAreaHourRec(DefAreaHourRecService areaHourRecService) {
        this.areaHourRecService = areaHourRecService;
    }

    // fixedRate 表示固定的时间间隔（以毫秒为单位）触发任务的执行。换句话说，fixedRate=5000 则表示任务每 5 秒执行一次。无论当前任务是否已经完成，当周期性地执行下一个任务时，它将始终按照指定的间隔时间启动。
    // fixedDelay 表示上一次任务执行完成后延迟一段时间再启动下一次任务（以毫秒为单位）。例如，fixedDelay=5000 则表示任务开始执行后等待 5 秒，然后启动下一次任务。这意味着无论上一个任务执行时间长度是多长，都会等待该时间长度的间隔后再启动下一个任务。
    // @Scheduled(fixedRate = 5000)
    //@Scheduled(fixedDelayString = "#{@databaseService.getCollectTaskFrequency()}")
    // @Scheduled(fixedRate = 5000)

    @Async
    public void scheduledTask() {
        log.debug("定时任务,上报发送防区小时浓度监测数据");
        reportRec();
    }

    private void reportRec() {

        //1.获取待上报数据
        HourCriteria recCriteria = new HourCriteria();
        recCriteria.setReportStatus(0);
        List<DefAreaHourRec> recList = areaHourRecService.findList(recCriteria);
        if (recList == null || recList.size() < 1) return;

        System.out.println("防区小时浓度监测数据待上报数据量:" + recList.size());

        //2.上报数据预处理

        //3.调用上报接口上报数据
        //for(int i=0;i<10;i++)
        for (int i = 0; i < recList.size(); i++) {
            DefAreaHourRec recDto = recList.get(i);
            String jsonString = JSON.toJSONString(recDto);
            String urlPath = new String("/api/areaHourRec/addAreaHourRec");
            String returnResult = HttpClientUtil.reportDataByHttp(jsonString, urlPath);
            //4.如果上报成功,更改上报标志
            if (Integer.valueOf(returnResult) == HttpStatus.CREATED.value()) {
                recDto.setReportStatus(1);
                areaHourRecService.updateIgnoreNull(recDto, recDto.getId());
            }
        }
    }


}
